# $language = "python"
# $interface = "1.0"


def read_file():
    # 读取txt设备登陆信息，分割每行数据组成一个list
    with open('huawei_device_list.txt', 'r') as f:
        info = f.read().split('\n')
    # 遍历list，使用#注释该行数据，返回一个生成器
    for i in info:
        if i[0] == '#':
            pass
        elif i == ' ':
            pass
        else:
            yield i.split()


def write_file(error_device):
    # 记录异常设备，写入txt
    with open('errorlog.txt', 'a') as f:
        f.write(str(error_device) + ' failed.\n')


def get_config(hostname, ip, user, passwd):
    # 构造ssh登陆参数，设备名称、用户名、密码、IP地址
    cmd = '/SSH2 /L %s /PASSWORD %s /C 3DES /M MD5 %s' % (user, passwd, ip)
    # 调用crt连接，ssh登陆设备
    crt.Session.Connect(cmd)
    crt.Screen.Synchronous = True
    # 创建日志文件，开启日志记录功能，日志文明名称格式：设备名称_ip.txt
    crt.Session.LogFileName = '%s_%s.txt' % (hostname, ip)
    crt.Session.Log(True)
    # 执行'dis cu'命令，获取设备配置
    crt.Screen.Send("dis cu" + chr(13))
    # 处理分屏问题，判读是否捕获到关键字符串‘---- More ----’最长等待时间5s，如果捕获该值，发送换行字符串；
    # 如果没有捕获该值认为没有分屏，跳出循环，断开连接
    while True:
        if crt.Screen.WaitForString("---- More ----", 5):
            crt.Screen.Send(' ' + chr(10))
        else:
            break
    crt.Session.Disconnect()


def main():
    for user_info in read_file():
        try:
            get_config(*user_info)
        except:
            write_file(user_info)


main()

